package org.gvp.common.constant;

import org.gvp.common.http.Page;

import java.util.List;

/**
 * <li>全局控制层接口,此接口指定所有的方法细节都在服务层处理,此接口只作为请求映射</li>
 * <ul>
 *     <li>增加数据方法前缀: add </li>
 *     <li>删除数据方法前缀: delete </li>
 *     <li>修改数据方法前缀: update </li>
 *     <li>查找数据方法前缀: query </li>
 *     <li>请求列表数据方法前缀: queryList </li>
 *     <li>请求分页数据方法前缀: queryPage </li>
 * </ul>
 * @param <T> 数据库实体类数据类型
 * @author gvp
 * @since 2024-06-27
 * @version 1.3
 */
public interface SummerController <T>{
    /**
     * 添加一条数据信息
     * @param dto 数据实体类对象,或者是包含实体类对象信息的转换类
     * @return 添加结果,非0表示添加成功
     */
    default Integer add(T dto){return null;}
    /**
     * 添加一条数据信息,添加成功后反回添加成功的信息
     * @param dto 数据实体类对象,或者是包含实体类对象信息的转换类
     * @return 添加成功的最近数据信息,如果添加失败反回null
     */
    default T addReturn(T dto){return null;}
    /**
     * 删除一条信息,根据数据的编号,反回删除的条数
     */
    default Integer deleteById(Integer id){return null;}
    /**
     * 修改数据信息,根据dto中的编号修改但是不会修改dto中的id属性
     * @param dto 数据实体类对象,或者是包含实体类对象信息的转换类
     * @return 修改结果,1表示成功,0表示失败,大于1表示存在问题
     */
    default Integer update(T dto){return null;}
    /**
     * 修改数据信息,根据dto中的编号修改但是不会修改dto中的id属性
     * @param dto 数据实体类对象,或者是包含实体类对象信息的转换类
     * @return 修改后的数据
     */
    default T updateReturn(T dto){return null;}
    /**
     * 根据数据编号查找数据信息
     * @param id 数据编号
     */
    default T queryById(Integer id){return null;}
    /**
     * 查找全部数据信息,当数据量过大的时候不要调用此方法
     */
    default List<T> queryList(){return null;}
    /**
     * 查找指定条数的数据信息
     * @param start 开始位置
     * @param end 结束位置
     */
    default List<T> queryLimit(int start,int end){return null;}
    /**
     * 查找分页数据
     * @param page 当前页码
     * @param size 每页显示数据量
     */
    default Page<T> queryPage(int page,int size){return null;}
}
